// 更新渠道代码的脚本
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

// 渠道代码映射表
const channelCodeMap = {
  '美团外卖': 'meituan',
  '饿了么': 'eleme',
  '线下店铺': 'offline',
  '小程序': 'miniprogram',
  '京东': 'jd',
  '抖音': 'douyin',
  '其他': 'other'
};

// 为没有代码的渠道生成代码
const generateCodeFromName = (name) => {
  // 如果在映射表中存在，直接返回
  if (channelCodeMap[name]) {
    return channelCodeMap[name];
  }
  
  // 否则，将名称转换为拼音首字母或英文小写
  // 这里简化处理，实际可能需要更复杂的拼音转换
  return name
    .toLowerCase()
    .replace(/\s+/g, '_')
    .replace(/[^\w\s]/gi, '');
};

// 更新渠道代码
async function updateChannelCodes() {
  try {
    console.log('开始更新渠道代码...');
    
    // 获取所有渠道
    const channels = await prisma.channel.findMany();
    console.log(`找到 ${channels.length} 个渠道`);
    
    // 遍历并更新没有代码的渠道
    for (const channel of channels) {
      if (!channel.code) {
        const code = generateCodeFromName(channel.name);
        
        // 检查生成的代码是否已存在
        let finalCode = code;
        let counter = 1;
        
        while (true) {
          const existingChannel = await prisma.channel.findFirst({
            where: { code: finalCode, id: { not: channel.id } }
          });
          
          if (!existingChannel) break;
          
          // 如果代码已存在，添加数字后缀
          finalCode = `${code}_${counter}`;
          counter++;
        }
        
        // 更新渠道代码
        await prisma.channel.update({
          where: { id: channel.id },
          data: { code: finalCode }
        });
        
        console.log(`已更新渠道 "${channel.name}" 的代码为 "${finalCode}"`);
      } else {
        console.log(`渠道 "${channel.name}" 已有代码 "${channel.code}"`);
      }
    }
    
    console.log('渠道代码更新完成');
  } catch (error) {
    console.error('更新渠道代码出错:', error);
  } finally {
    await prisma.$disconnect();
  }
}

// 执行更新
updateChannelCodes(); 